package Java.BlackHorse.Regex;



public class RegexDemo5 {
    /*
    利用正则表达式验证用户名是否满足要求：大小写字母，数字，下划线一共4-16位

     */
    public static void main(String[] args) {
//        String regex1="[a-zA-Z0-9_]{4,16}";
        String regex1 = "\\w{4,16}";
        System.out.println("用户名校验");
        System.out.println("zhangsan".matches(regex1));
        System.out.println("$23456".matches(regex1));
        System.out.println("_123456".matches(regex1));

//        身份证号码的简单校验
//        18位 前17位任意数字 最后一位可以是数字可以大写或小写x

//        String regex2="\\w{17}[0-9xX]";
        String regex2="\\w{17}(\\d|(?i)x)";
        System.out.println("----------------------");
        System.out.println("身份证号码校验");
        System.out.println("44030519900101001X".matches(regex2));
        System.out.println("44030519900101001x".matches(regex2));
        System.out.println("440305199001010011".matches(regex2));

        //忽略大小写的书写方式
        String regex3="(?i)abc";//忽略abc大小写
        System.out.println("----------------------");
        System.out.println("aBc".matches(regex3));
        System.out.println("Abc".matches(regex3));
        System.out.println("ABC".matches(regex3));

        String regex4="a((?i)b)c";//只忽略bc大小写
        System.out.println("----------------------");
        System.out.println("aBc".matches(regex4));
        System.out.println("Abc".matches(regex4));
        System.out.println("ABC".matches(regex4));

        //忽略b的大小写
        String regex5="a(?i)bc";//忽略b的大小写
        System.out.println("----------------------");
        System.out.println("aBc".matches(regex5));
        System.out.println("Abc".matches(regex5));
        System.out.println("ABC".matches(regex5));

        //身份证的严格校验
        //前面六位： 省份，市区， 第一位不能是0 后5位是任意数字 [1-9]\\d{5}
        //年的前半段：18 19 20    (18|19|20)
        //后两位： 01-12    \\d{2}
        //月份： 01-12 (0[1-9]|1[0-2])
        //天数： 01-31 (0[1-9]|[12]\\d|3[01])
        //最后4位 任意数字最后一位可以是数字可以大写或小写x \\d{3}(\\d|(?i)x)
        System.out.println("----------------------");
        System.out.println("身份证的严格校验");
        String regex6="[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}(\\d|(?i)x)";
        System.out.println("44030519900101001X".matches(regex6));
        System.out.println("44030519900101001x".matches(regex6));
        System.out.println("440305199001010011".matches(regex6));
    }
}
